﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Bainder;
using System.CodeDom.Compiler;
using System.IO;

namespace BainderNet
{
    public partial class FrmPrincipal : Form
    {
        public FrmPrincipal()
        {
            InitializeComponent();
        }

        private void btnBuscarArchivoPrincipal_Click(object sender, EventArgs e)
        {
            if (ofdArchivo.ShowDialog() == DialogResult.OK)
                txtArchivoPrincipal.Text = ofdArchivo.FileName;
        }

        private void lstArchivoInternos_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnEliminarArchivo.Enabled = lstArchivoInternos.SelectedIndex > 0;
        }

        private void btnAgregarArchivo_Click(object sender, EventArgs e)
        {
            if (ofdArchivo.ShowDialog() == DialogResult.OK)
                foreach (string nombreArchivo in ofdArchivo.FileNames)
                    lstArchivoInternos.Items.Add(nombreArchivo);
        }

        private void btnEliminarArchivo_Click(object sender, EventArgs e)
        {
            lstArchivoInternos.Items.RemoveAt(lstArchivoInternos.SelectedIndex);
        }

        private void btnGenerar_Click(object sender, EventArgs e)
        {
            try
            {
                if (fbdSalida.ShowDialog() == DialogResult.OK)
                {
                    List<string> archivos = new List<string>();
                    for (int i = 0; i < lstArchivoInternos.Items.Count; i++)
                        archivos.Add(lstArchivoInternos.Items[i].ToString());

                    string archivoSalida = fbdSalida.SelectedPath + @"\" + txtEjecutableSalida.Text;

                    Bain bain = new Bain();
                    CompilerResults resultado = bain.Compilar(txtArchivoPrincipal.Text, archivos, archivoSalida);

                    if (resultado.Errors.Count > 0)
                    {
                        using (StreamWriter writer = new StreamWriter("Salida.txt"))
                            for (int i = 0; i < resultado.Errors.Count; i++)
                                writer.WriteLine("{0} - {1}", resultado.Errors[i].Line.ToString(), resultado.Errors[i].ErrorText);

                        MessageBox.Show("PIJA: Ver archivo Salida.txt", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                        MessageBox.Show("Todo bien vo, fijate si se guardó", "Hecho", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
